In a memory (e.g., an embedded memory) where output data is not registered, the last stage in an output data path is typically a column data multiplexer. The multiplexer selects from among a number of column data signals based on the column address. One potential drawback with the column addresses, which are the control signals to the column data multiplexer, is that the column addresses could arrive at the column data multiplexer before the column data signals. This may occur because the column data signals, which travel through the memory core, may have a slower path relative to the column addresses. Consequently, this may result in a glitch on the output data signal due to the column data multiplexer switching from one column to a second column before new valid output data arrives at the second column. Therefore, for a brief period, old invalid output data is read out from the second column.
A conventional approach to this problem is to delay the column address to the column data multiplexer so that the column addresses arrive at the column data multiplexer after the valid output data from the memory core. For example, one approach is to insert a delay (e.g., a delay chain) in the column address path so that the column addresses arrive at the column data multiplexer after the output data. However, it may be difficult to match the output data path with the column address path.
As another example, a second approach is to provide a data path circuit (e.g., a dummy data path) to generate the column address signals to match the column address delay and the output data delay to the column data multiplexer. However, this approach may add significantly to die area overhead and design complexity. As a result, there is a need for improved memory techniques for providing the output data.